9、字串分值和
题目 子串分值和
思路分析
大略想了一下 双指针
双指针确定子串 然后k在每个子串中遍历 使用set记录不同元素的数量
三个大循环 估计只能过俩三个案例
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int n=s.size();
int sum=0;
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
set<int> kinds;
for(int k=i;k<=j;k++){
kinds.insert(s[k]);
}
sum+=kinds.size();
}
}
cout<<sum;
return 0;
}
结果过4个 8分
可以去掉一层k循环 只需要枚举每个起点 往后走的过程中 出现的种数只可能增加
顺便把效率低的set换成快些的数组(值作下标计数)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
bool st[N];
int main()
{
string s;
cin>>s;
int n=s.size();
int sum=0;
for(int i=0;i<n;i++){
memset(st,false,sizeof st);
int count=1;
st[s[i]]=true;
for(int j=i;j<n;j++){
if(!st[s[j]]){
count++;
st[s[j]]=true;
}
sum+=count;
}
}
cout<<sum;
return 0;
}
随随便便就多过了两个
何乐而不为
再要往后优化 就得换个思路了
懒得看 有空回头再去查
代码实现
同类题型
视频讲解
⬅️ 8、回文日期 🏠 00-刷题理模型 ➡️ 第十一届 c++ B组 省赛
💬 评论